|
Программируем по-русски
|
Основная задача Глагола — дать человеку возможность воплощать свои мысли на языке, близком к его родному языку. Издатель Глагола
|
(******************************************************************************) (**) ОТДЕЛ ПроССим+; (****************************************************************************** * НАЗНАЧЕНИЕ: нахождение собственных значений симметричной матрицы * рекуррентным методом Якоби * * ПРИМЕЧАНИЯ: * В данном приложении метод применяется к матрице Гильберта. Известно, что * матрица Гильберта является плохо обусловленной (отношение наименьшего * собственного значения к наименьшему очень мало). * Метод Якоби применяет к исходной матрице такие перевороты, чтобы * получить диагональную матрицу. В итоге, на диагонали будут находиться * собственные значения, а исходная матрица будет содержать собственные * вектора. * Переменная <точность> определяет в каких случаях недиагональный элемент * преобразуемой матрицы будет рассматриваться как 0 (выраженный как * дробь от суммы квадратов диагональных элементов). ******************************************************************************) ИСПОЛЬЗУЕТ Матем ИЗ "...\Отделы\Числа\", Вект ИЗ "...\Отделы\Числа\", Матр ИЗ "...\Отделы\Числа\", Собств ИЗ "...\Отделы\Числа\", МатрВВ ИЗ "...\Отделы\Числа\", Вывод ИЗ "...\Отделы\Обмен\"; ПОСТ порядок=6; (* порядок системы *) проходов=500; (* наибольшее допустимое число проходов вычисления *) (******************************************************************************) ЗАДАЧА Гильберт(М+:Матр.Вид); (* Построение матрицы Гильберта порядок-го порядка ( 1 1/2 1/3 1/4 ... 1/порядок ) ( 1/2 1/3 1/4 1/5 ... 1/(порядок+1) ) М = ( 1/3 1/4 1/5 1/6 ... 1/(порядок+2) ) ( ........................................... ) ( 1/порядок 1/(порядок+1) 1/(порядок+2) 1/(порядок+3) ... 1/(2N-1) ) *) ПЕР i,j,посл:ЦЕЛ; УКАЗ посл:=РАЗМЕР(М)-1; (* первая строка *) М[0,0]:=1; ОТ j:=1 ДО посл ВЫП М[0,j]:=1/(j+1) КОН; (* оставшиеся строки *) ОТ i:=1 ДО посл ВЫП (* последний столбец *) М[i,посл]:=1/(посл+i+1); (* заполнить матрицу *) ОТ j:=0 ДО посл-1 ВЫП М[i,j]:=М[i-1,j+1] КОН КОН КОН Гильберт; (******************************************************************************) ЗАДАЧА Голова; ПЕР М :Матр.Доступ; (* исходная матрица *) СВ:Матр.Доступ; (* матрица с собственными векторами *) сз:Вект.Доступ; (* собственные значения *) точность:Матем.Вещ; (* точность вычислений *) УКАЗ точность:=Матем.квкор(Матем.МАШЕПС); СОЗДАТЬ(М,порядок,порядок); СОЗДАТЬ(СВ,порядок,порядок); СОЗДАТЬ(сз,порядок); Гильберт(М^); ЕСЛИ Собств.Якоби(М^,проходов,точность,СВ^,сз^) = 0 ТО Вывод.Цепь("^собственные значения:^"); МатрВВ.ВыводВект("%12.3e",сз^); ЕСЛИ порядок < 7 ТО Вывод.Цепь("^собственные вектора:^"); МатрВВ.ВыводМатр("%10.6f",СВ^) КОН ИНАЧЕ Вывод.Цепь("^Нет схождения!^") КОН КОН Голова; (******************************************************************************) УКАЗ Голова КОН ПроССим. ▲ Вопросы, замечания и предложения высылайте на atimopheyev@yahoo.com или Издателю Глагола:
|
|